package com.cskaoyan.advice;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.stereotype.Component;

/**
 * 计算委托类方法执行时间的通知
 * @author stone
 * @date 2022/08/03 10:48
 */
@Component
public class CountTimeAdvice implements MethodInterceptor {
    @Override
    public Object invoke(MethodInvocation methodInvocation) throws Throwable {
        //类似于InvocationHandler的invoke方法
        long start = System.currentTimeMillis();
        // 除了委托类方法执行，做一些其他的业务 → 增强
        // 执行委托类方法
        Object proceed = methodInvocation.proceed();//执行委托类方法 → 类似于method.invoke
        long end = System.currentTimeMillis();
        long cost = end - start;
        System.out.println(methodInvocation.getMethod().getName() + "方法的执行时间：" + cost);
        if (cost > 1024) {
            System.out.println("warning！！！！ → 发送短信、发送邮件");
        }
        return proceed;
    }
}
